(in-package :TRAPS)
; Generated from #P"macintosh-hd:hd3:CInterface Translator:Source Interfaces:ip_icmp.h"
; at Sunday July 2,2006 7:30:07 pm.
; 
;  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
;  *
;  * @APPLE_LICENSE_HEADER_START@
;  * 
;  * The contents of this file constitute Original Code as defined in and
;  * are subject to the Apple Public Source License Version 1.1 (the
;  * "License").  You may not use this file except in compliance with the
;  * License.  Please obtain a copy of the License at
;  * http://www.apple.com/publicsource and read it before using this file.
;  * 
;  * This Original Code and all software distributed under the License are
;  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
;  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
;  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
;  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
;  * License for the specific language governing rights and limitations
;  * under the License.
;  * 
;  * @APPLE_LICENSE_HEADER_END@
;  
; 
;  * Copyright (c) 1982, 1986, 1993
;  *	The Regents of the University of California.  All rights reserved.
;  *
;  * Redistribution and use in source and binary forms, with or without
;  * modification, are permitted provided that the following conditions
;  * are met:
;  * 1. Redistributions of source code must retain the above copyright
;  *    notice, this list of conditions and the following disclaimer.
;  * 2. Redistributions in binary form must reproduce the above copyright
;  *    notice, this list of conditions and the following disclaimer in the
;  *    documentation and/or other materials provided with the distribution.
;  * 3. All advertising materials mentioning features or use of this software
;  *    must display the following acknowledgement:
;  *	This product includes software developed by the University of
;  *	California, Berkeley and its contributors.
;  * 4. Neither the name of the University nor the names of its contributors
;  *    may be used to endorse or promote products derived from this software
;  *    without specific prior written permission.
;  *
;  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
;  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
;  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
;  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
;  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
;  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
;  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
;  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
;  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
;  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
;  * SUCH DAMAGE.
;  *
;  *	@(#)ip_icmp.h	8.1 (Berkeley) 6/10/93
;  * $FreeBSD: src/sys/netinet/ip_icmp.h,v 1.16 1999/12/29 04:41:01 peter Exp $
;  
; #ifndef _NETINET_IP_ICMP_H_
; #define _NETINET_IP_ICMP_H_

(require-interface "sys/appleapiopts")
; 
;  * Interface Control Message Protocol Definitions.
;  * Per RFC 792, September 1981.
;  
; 
;  * Internal of an ICMP Router Advertisement
;  
(defrecord icmp_ra_addr
   (ira_addr :UInt32)
   (ira_preference :UInt32)
)
; 
;  * Structure of an icmp header.
;  
(defrecord icmp
   (icmp_type :UInt8)
                                                ;  type of message, see below 
   (icmp_code :UInt8)
                                                ;  type sub code 
   (icmp_cksum :UInt16)
                                                ;  ones complement cksum of struct 
   (:variant
   (
   (ih_pptr :UInt8)
   )
                                                ;  ICMP_PARAMPROB 
   (
   (ih_gwaddr :IN_ADDR)
   )
                                                ;  ICMP_REDIRECT 
   (
   (icd_id :UInt16)
   (icd_seq :UInt16)
   )
   (
   (ih_void :signed-long)
   )
                                                ;  ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) 
   (
   (ipm_void :UInt16)
   (ipm_nextmtu :UInt16)
   )
   (
   (irt_num_addrs :UInt8)
   (irt_wpa :UInt8)
   (irt_lifetime :UInt16)
   )
   )
; #define	icmp_pptr	icmp_hun.ih_pptr
; #define	icmp_gwaddr	icmp_hun.ih_gwaddr
; #define	icmp_id		icmp_hun.ih_idseq.icd_id
; #define	icmp_seq	icmp_hun.ih_idseq.icd_seq
; #define	icmp_void	icmp_hun.ih_void
; #define	icmp_pmvoid	icmp_hun.ih_pmtu.ipm_void
; #define	icmp_nextmtu	icmp_hun.ih_pmtu.ipm_nextmtu
; #define	icmp_num_addrs	icmp_hun.ih_rtradv.irt_num_addrs
; #define	icmp_wpa	icmp_hun.ih_rtradv.irt_wpa
; #define	icmp_lifetime	icmp_hun.ih_rtradv.irt_lifetime
   (:variant
   (
   (its_otime :UInt32)
   (its_rtime :UInt32)
   (its_ttime :UInt32)
   )
   (
   (idi_ip :IP)
                                                ;  options and then 64 bits of data 
   )
   (
   (id_radv :ICMP_RA_ADDR)
   )
   (
   (id_mask :UInt32)
   )
   (
   (id_data (:array :character 1))
   )
   )
; #define	icmp_otime	icmp_dun.id_ts.its_otime
; #define	icmp_rtime	icmp_dun.id_ts.its_rtime
; #define	icmp_ttime	icmp_dun.id_ts.its_ttime
; #define	icmp_ip		icmp_dun.id_ip.idi_ip
; #define	icmp_radv	icmp_dun.id_radv
; #define	icmp_mask	icmp_dun.id_mask
; #define	icmp_data	icmp_dun.id_data
)
; 
;  * Lower bounds on packet lengths for various types.
;  * For the error advice packets must first insure that the
;  * packet is large enough to contain the returned ip header.
;  * Only then can we do the check to see if 64 bits of packet
;  * data have been returned, since we need to check the returned
;  * ip header length.
;  
(defconstant $ICMP_MINLEN 8)
; #define	ICMP_MINLEN	8				/* abs minimum */
(defconstant $ICMP_TSLEN 20)
; #define	ICMP_TSLEN	(8 + 3 * sizeof (n_time))	/* timestamp */
(defconstant $ICMP_MASKLEN 12)
; #define	ICMP_MASKLEN	12				/* address mask */
(defconstant $ICMP_ADVLENMIN 43)
; #define	ICMP_ADVLENMIN	(8 + sizeof (struct ip) + 8)	/* min */
; #ifndef _IP_VHL
; #define	ICMP_ADVLEN(p)	(8 + ((p)->icmp_ip.ip_hl << 2) + 8)
;  N.B.: must separately check that ip_hl >= 5 
#| 
; #else
; #define	ICMP_ADVLEN(p)	(8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8)
;  N.B.: must separately check that header length >= 5 
 |#

; #endif

; 
;  * Definition of type and code field values.
;  
(defconstant $ICMP_ECHOREPLY 0)
; #define	ICMP_ECHOREPLY		0		/* echo reply */
(defconstant $ICMP_UNREACH 3)
; #define	ICMP_UNREACH		3		/* dest unreachable, codes: */
(defconstant $ICMP_UNREACH_NET 0)
; #define		ICMP_UNREACH_NET	0		/* bad net */
(defconstant $ICMP_UNREACH_HOST 1)
; #define		ICMP_UNREACH_HOST	1		/* bad host */
(defconstant $ICMP_UNREACH_PROTOCOL 2)
; #define		ICMP_UNREACH_PROTOCOL	2		/* bad protocol */
(defconstant $ICMP_UNREACH_PORT 3)
; #define		ICMP_UNREACH_PORT	3		/* bad port */
(defconstant $ICMP_UNREACH_NEEDFRAG 4)
; #define		ICMP_UNREACH_NEEDFRAG	4		/* IP_DF caused drop */
(defconstant $ICMP_UNREACH_SRCFAIL 5)
; #define		ICMP_UNREACH_SRCFAIL	5		/* src route failed */
(defconstant $ICMP_UNREACH_NET_UNKNOWN 6)
; #define		ICMP_UNREACH_NET_UNKNOWN 6		/* unknown net */
(defconstant $ICMP_UNREACH_HOST_UNKNOWN 7)
; #define		ICMP_UNREACH_HOST_UNKNOWN 7		/* unknown host */
(defconstant $ICMP_UNREACH_ISOLATED 8)
; #define		ICMP_UNREACH_ISOLATED	8		/* src host isolated */
(defconstant $ICMP_UNREACH_NET_PROHIB 9)
; #define		ICMP_UNREACH_NET_PROHIB	9		/* prohibited access */
(defconstant $ICMP_UNREACH_HOST_PROHIB 10)
; #define		ICMP_UNREACH_HOST_PROHIB 10		/* ditto */
(defconstant $ICMP_UNREACH_TOSNET 11)
; #define		ICMP_UNREACH_TOSNET	11		/* bad tos for net */
(defconstant $ICMP_UNREACH_TOSHOST 12)
; #define		ICMP_UNREACH_TOSHOST	12		/* bad tos for host */
(defconstant $ICMP_UNREACH_FILTER_PROHIB 13)
; #define		ICMP_UNREACH_FILTER_PROHIB 13		/* admin prohib */
(defconstant $ICMP_UNREACH_HOST_PRECEDENCE 14)
; #define		ICMP_UNREACH_HOST_PRECEDENCE 14		/* host prec vio. */
(defconstant $ICMP_UNREACH_PRECEDENCE_CUTOFF 15)
; #define		ICMP_UNREACH_PRECEDENCE_CUTOFF 15	/* prec cutoff */
(defconstant $ICMP_SOURCEQUENCH 4)
; #define	ICMP_SOURCEQUENCH	4		/* packet lost, slow down */
(defconstant $ICMP_REDIRECT 5)
; #define	ICMP_REDIRECT		5		/* shorter route, codes: */
(defconstant $ICMP_REDIRECT_NET 0)
; #define		ICMP_REDIRECT_NET	0		/* for network */
(defconstant $ICMP_REDIRECT_HOST 1)
; #define		ICMP_REDIRECT_HOST	1		/* for host */
(defconstant $ICMP_REDIRECT_TOSNET 2)
; #define		ICMP_REDIRECT_TOSNET	2		/* for tos and net */
(defconstant $ICMP_REDIRECT_TOSHOST 3)
; #define		ICMP_REDIRECT_TOSHOST	3		/* for tos and host */
(defconstant $ICMP_ECHO 8)
; #define	ICMP_ECHO		8		/* echo service */
(defconstant $ICMP_ROUTERADVERT 9)
; #define	ICMP_ROUTERADVERT	9		/* router advertisement */
(defconstant $ICMP_ROUTERSOLICIT 10)
; #define	ICMP_ROUTERSOLICIT	10		/* router solicitation */
(defconstant $ICMP_TIMXCEED 11)
; #define	ICMP_TIMXCEED		11		/* time exceeded, code: */
(defconstant $ICMP_TIMXCEED_INTRANS 0)
; #define		ICMP_TIMXCEED_INTRANS	0		/* ttl==0 in transit */
(defconstant $ICMP_TIMXCEED_REASS 1)
; #define		ICMP_TIMXCEED_REASS	1		/* ttl==0 in reass */
(defconstant $ICMP_PARAMPROB 12)
; #define	ICMP_PARAMPROB		12		/* ip header bad */
(defconstant $ICMP_PARAMPROB_ERRATPTR 0)
; #define		ICMP_PARAMPROB_ERRATPTR 0		/* error at param ptr */
(defconstant $ICMP_PARAMPROB_OPTABSENT 1)
; #define		ICMP_PARAMPROB_OPTABSENT 1		/* req. opt. absent */
(defconstant $ICMP_PARAMPROB_LENGTH 2)
; #define		ICMP_PARAMPROB_LENGTH 2			/* bad length */
(defconstant $ICMP_TSTAMP 13)
; #define	ICMP_TSTAMP		13		/* timestamp request */
(defconstant $ICMP_TSTAMPREPLY 14)
; #define	ICMP_TSTAMPREPLY	14		/* timestamp reply */
(defconstant $ICMP_IREQ 15)
; #define	ICMP_IREQ		15		/* information request */
(defconstant $ICMP_IREQREPLY 16)
; #define	ICMP_IREQREPLY		16		/* information reply */
(defconstant $ICMP_MASKREQ 17)
; #define	ICMP_MASKREQ		17		/* address mask request */
(defconstant $ICMP_MASKREPLY 18)
; #define	ICMP_MASKREPLY		18		/* address mask reply */
(defconstant $ICMP_MAXTYPE 18)
; #define	ICMP_MAXTYPE		18
; #define	ICMP_INFOTYPE(type) 	((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || 	(type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || 	(type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || 	(type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || 	(type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
; #ifdef KERNEL
#| #|
#ifdef__APPLE_API_PRIVATE
void	icmp_error __P((struct mbuf *, int, int, n_long, struct ifnet *));
void	icmp_input __P((struct mbuf *, int));
#endif
#endif
|#
 |#

; #endif


(provide-interface "ip_icmp")